package com.ljw.spring.annotation.bean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @FileName Animal
 * @Description TODO
 * @Author ljw
 * @Date 2021/2/3 1:25
 * @Version 1.0
 */
@Component
public class Animal {

    private Dog dog;

    //当只有一个有参构造函数时，有参构造上的@Autowired可以省略，但参数组件还是自动从IOC容器中获取
    @Autowired
    public Animal(Dog dog) {
        this.dog = dog;
        System.out.println("有参构造创建Animal实例：当把@Autowired标注在一个类的有参构造函数上时，IOC容器中这个类的组件就会调用有参构造创建其实例对象；");
    }

    public Animal() {
        System.out.println("IOC容器启动时，IOC容器中的组件默认调用无参构造创建实例对象；");
    }

    //标注在方法上，方法参数会从IOC容器获取对应的组件,并赋值
    //@Autowired
    public void setDog(Dog dog) {
        this.dog = dog;
    }


    public Dog getDog() {
        return dog;
    }

    @Override
    public String toString() {
        return "Animal{" +
                "dog=" + dog +
                '}';
    }
}
